package checker;

import util.AST.Comando.Argumentos;
import util.AST.Comando.Break;
import util.AST.Comando.ChamadaFuncao;
import util.AST.Comando.DecFuncao;
import util.AST.Comando.DecVariavel;
import util.AST.Comando.IfElse;
import util.AST.Comando.Next;
import util.AST.Comando.Parametros;
import util.AST.Comando.Print;
import util.AST.Comando.Programa;
import util.AST.Comando.Return;
import util.AST.Comando.While;
import util.AST.Expressao.ExpressaoAri;
import util.AST.Expressao.ExpressaoAriPrimaria;
import util.AST.Expressao.ExpressaoRel;
import util.AST.Terminal.Booleano;
import util.AST.Terminal.ID;
import util.AST.Terminal.NumFloat;
import util.AST.Terminal.NumInt;
import util.AST.Terminal.OpAri;
import util.AST.Terminal.OpRel;
import util.AST.Terminal.Valor;

public interface Visitor {
	
	
	public Object visitPrograma(Programa p, Object o) throws SemanticException;
	
	public Object visitBreak(Break br, Object o) throws SemanticException;
	
	public Object visitChamadaFuncao(ChamadaFuncao chamFunc, Object o) throws SemanticException;
	
	public Object visitDecFuncao(DecFuncao decFun, Object o) throws SemanticException;
	
	public Object visitDecVariavel(DecVariavel decVar, Object o) throws SemanticException;
	
	public Object visitIfElse(IfElse ifElse, Object o) throws SemanticException;
	
	public Object visitNext(Next next, Object o) throws SemanticException;
	
	public Object visitParametros(Parametros param, Object o) throws SemanticException;
	
	public Object visitPrint(Print print, Object o) throws SemanticException;
	
	public Object visitWhile(While whi, Object o) throws SemanticException;
	
	public Object visitExpressaoAri(ExpressaoAri expAri, Object o) throws SemanticException;
	
	public Object visitExpressaoAriPrimaria(ExpressaoAriPrimaria expAriPri, Object o) throws SemanticException;
	
	public Object visitExpressaoRel(ExpressaoRel expRel, Object o) throws SemanticException;
	
	public Object visitID(ID id, Object o) throws SemanticException;
	
	public Object visitNumFloat(NumFloat numFloat, Object o) throws SemanticException;
	
	public Object visitNumInt(NumInt numInt, Object o) throws SemanticException;
	
	public Object visitOpAri(OpAri opAri, Object o) throws SemanticException;
	
	public Object visitOpRel(OpRel opRel, Object o) throws SemanticException;
	
	public Object visitReturn(Return ret, Object o) throws SemanticException;
	
	public Object visitValor(Valor valor, Object o) throws SemanticException;
	
	public Object visitBooleano(Booleano bool, Object o) throws SemanticException;
	
	public Object visitArgumentos(Argumentos argumentos, Object o) throws SemanticException;

}